import router from '@/router'
import store from '@/store'
// import { config } from '@vue/test-utils'
// import { config } from '@vue/test-utils'
import axios from 'axios'
// import { MessageBox, Message } from 'element-ui'
// import store from '@/store'
// import { getToken } from '@/utils/auth'

// create an axios instance
const service = axios.create({
  baseURL: 'http://120.24.171.137:1337' // url = base url + request url
  // withCredentials: true, // send cookies when cross-domain requests
  // timeout: 5000 // request timeout
})
// 请求拦截器, 给每个接口都带上 token
// 拦截到的形参一般叫 config 当前请求的配置
// 登录接口例外, 其实就是必须登陆过有 token 才能带上
service.interceptors.request.use(config => {
  // store.getters.token:通过gettest.js文件获取token，有则在每次请求数据之前把token带上
  if (store.getters.token) {
    // 设置token有效时长
    const nowTime = new Date()
    const timestamp = localStorage.getItem('timestamp')
    const timeout = 1000 * 60 * 60 * 2
    // 如果用户没有操作时长达到设置的时长
    if (nowTime - timestamp > timeout) {
      // 调用退出登录函数（清除token）
      store.dispatch('user/logout')
      // 跳转到登录页面
      router.push('/login')
      // return终止函数，并且提醒用户超时
      return Promise.reject(new Error('登录已超时（主动介入）'))
    }
    // 每次请求数据之前把token带上
    if (!config.isToken) {
      config.headers.Authorization = 'Bearer ' + store.getters.token
    }
  }
  return config
})

// 响应拦截器 统一处理错误
// 响应拦截器, 可以接受两个回调, 第一个会拦截到网络成功
// 第二个拦截到的是网络失败

export default service
